home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import gtk
- import cairo
-
- class GtkInkLevel(gtk.DrawingArea):
-
- def __init__(self, color, level = 0):
- gtk.DrawingArea.__init__(self)
- self.connect('expose-event', self.expose_event)
- self._level = level
-
- try:
- self._color = gtk.gdk.color_parse(color)
- except (ValueError, TypeError):
- self._color = gtk.gdk.color_parse('#cccccc')
-
- self.set_size_request(30, 45)
-
-
- def set_level(self, level):
- self._level = level
- self.queue_resize()
-
-
- def get_level(self):
- return self._level
-
-
- def expose_event(self, widget, event):
- ctx = self.window.cairo_create()
- ctx.rectangle(event.area.x, event.area.y, event.area.width, event.area.height)
- ctx.clip()
- (w, h) = self.window.get_size()
- ratio = 1 * h / w
- if ratio < 1.5:
- w = h * 2 / 3
- else:
- h = w * 3 / 2
- thickness = 1
- ctx.translate(thickness, thickness)
- ctx.scale(w - 2 * thickness, h - 2 * thickness)
- thickness = max(ctx.device_to_user_distance(thickness, thickness))
- ctx.set_line_width(thickness)
- self.draw(ctx)
-
-
- def draw(self, ctx):
- r = self._color.red / 65535
- g = self._color.green / 65535
- b = self._color.blue / 65535
- fill_point = self._level / 100
- ctx.move_to(0.5, 0)
- ctx.curve_to(0.5, 0.33, 1, 0.5, 1, 0.67)
- ctx.curve_to(1, 0.85, 0.85, 1, 0.5, 1)
- ctx.curve_to(0.15, 1, 0, 0.85, 0, 0.67)
- ctx.curve_to(0, 0.5, 0.1, 0.2, 0.5, 0)
- ctx.close_path()
- ctx.set_source_rgb(r, g, b)
- ctx.stroke_preserve()
- if fill_point > 0:
- grad_width = 0.1
- grad_start = fill_point - grad_width / 2
- if grad_start < 0:
- grad_start = 0
-
- pat = cairo.LinearGradient(0, 1, 0, 0)
- pat.add_color_stop_rgba(0, r, g, b, 1)
- pat.add_color_stop_rgba((self._level - 5) / 100, r, g, b, 1)
- pat.add_color_stop_rgba((self._level + 5) / 100, 1, 1, 1, 1)
- pat.add_color_stop_rgba(1, 1, 1, 1, 1)
- ctx.set_source(pat)
- ctx.fill()
- else:
- ctx.set_source_rgb(1, 1, 1)
- ctx.fill()
-
-
- if __name__ == '__main__':
- import gobject
- import time
-
- def adjust_level(level):
- l = level.get_level()
- l += 1
- if l > 100:
- l = 0
-
- level.set_level(l)
- return True
-
- w = gtk.Window()
- w.set_border_width(12)
- vbox = gtk.VBox(spacing = 6)
- w.add(vbox)
- hbox = gtk.HBox(spacing = 6)
- vbox.pack_start(hbox, False, False, 0)
- klevel = GtkInkLevel('black', level = 100)
- clevel = GtkInkLevel('cyan', level = 60)
- mlevel = GtkInkLevel('magenta', level = 30)
- ylevel = GtkInkLevel('yellow', level = 100)
- hbox.pack_start(klevel)
- hbox.pack_start(clevel)
- hbox.pack_start(mlevel)
- hbox.pack_start(ylevel)
- gobject.timeout_add(10, adjust_level, klevel)
- gobject.timeout_add(10, adjust_level, clevel)
- gobject.timeout_add(10, adjust_level, mlevel)
- gobject.timeout_add(10, adjust_level, ylevel)
- w.show_all()
- w.connect('delete_event', gtk.main_quit)
- gtk.main()
-
-